package com.culturalCenter.dataCenter.mapper.training;

import com.culturalCenter.dataCenter.customEntity.training.CustomAttendanceList;
import com.culturalCenter.dataCenter.entity.training.TrainingAttendance;
import com.culturalCenter.dataCenter.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 培训考勤清单(TrainingAttendance)表数据库访问层
 *
 * @author makejava
 * @since 2020-09-22 19:24:39
 */
@Mapper
public interface TrainingAttendanceMapper extends BaseMapper<TrainingAttendance> {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     *
     * @return 实例对象
     */
    TrainingAttendance queryById(@Param("id") String id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     *
     * @return 对象列表
     */
    List<TrainingAttendance> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 分页查询所有数据
     *
     * @return 对象列表
     */
    List<TrainingAttendance> findPageAll();

    /**
     * 通过实体作为筛选条件查询
     *
     * @param trainingAttendance 实例对象
     *
     * @return 对象列表
     */
    List<TrainingAttendance> queryAll(TrainingAttendance trainingAttendance);

    /**
     * 新增数据
     *
     * @param trainingAttendance 实例对象
     *
     * @return 影响行数
     */
    int insert(TrainingAttendance trainingAttendance);

    /**
     * 选择列增加
     *
     * @param trainingAttendance 实例对象
     *
     * @return 影响行数
     */
    int insertSelective(TrainingAttendance trainingAttendance);

    /**
     * 修改数据
     *
     * @param trainingAttendance 实例对象
     *
     * @return 影响行数
     */
    int update(TrainingAttendance trainingAttendance);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     *
     * @return 影响行数
     */
    int deleteById(String id);

    /**
     * 考勤清单
     *
     * @param periodsId
     *
     * @return
     */
    List<CustomAttendanceList> queryByTrainingId(String periodsId);

    /**
     * 获取全勤率为100的次数
     *
     * @param trainingId
     *
     * @return
     */
    Integer selectAttendanceRate(@Param("trainingId") String trainingId);

    /**
     * 获取全勤率为90-99的次数
     *
     * @param trainingId
     *
     * @return
     */
    Integer selectAttendanceRate90(@Param("trainingId") String trainingId);

    /**
     * 获取全勤率为80-90%的次数
     *
     * @param trainingId
     *
     * @return
     */
    Integer selectAttendanceRate80(@Param("trainingId") String trainingId);

    /**
     * 获取全勤率低于80的次数
     *
     * @param trainingId
     *
     * @return
     */
    Integer selectElseAttendanceRate(@Param("trainingId") String trainingId);

    /**
     * 获取签到人数
     *
     * @param trainingId
     *
     * @return
     */
    Integer selectSignInNum(@Param("trainingId") String trainingId);

    /**
     * 统计签到数据
     *
     * @return
     */
    List<TrainingAttendance> countSignInNum();

    /**
     * 签到人数
     *
     * @param signInNumList
     */
    void insertBatch(@Param("signInNumList") List<TrainingAttendance> signInNumList);

    /**
     * 统计迟到人数
     *
     * @return
     */
    List<TrainingAttendance> countLateNum();

    /**
     * 更新迟到人数
     *
     * @param lateNumList
     */
    void insertLateNum(@Param("lateNumList") List<TrainingAttendance> lateNumList);

    /**
     * 统计请假人数
     *
     * @return
     */
    List<TrainingAttendance> countLeaveNum();

    /**
     * 更新请假人数
     *
     * @param leaveNumList
     */
    void insertLeaveNum(List<TrainingAttendance> leaveNumList);

    /**
     * 统计早退人数
     *
     * @return
     */
    List<TrainingAttendance> countEarlyNum();

    /**
     * 更新早退人数
     *
     * @param earlyNumList
     */
    void insertEarlyNum(@Param("earlyNumList") List<TrainingAttendance> earlyNumList);

    /**
     * 统计缺席人数
     *
     * @return
     */
    List<TrainingAttendance> countAbsentNum();

    /**
     * 更新缺席人数
     *
     * @param absentNumList
     */
    void insertAbsentNum(@Param("absentNumList") List<TrainingAttendance> absentNumList);

    /**
     * 统计全勤率
     *
     * @return
     */
    List<TrainingAttendance> countAttendanceRate();

    /**
     * 更新全勤率
     *
     * @param attendanceRateList
     */
    void insertAttendanceRate(@Param("attendanceRateList") List<TrainingAttendance> attendanceRateList);

}
